//////////////////////////////////////////////////////////////////////////
//             Copyright 2014  All Rights Reserved                //
//////////////////////////////////////////////////////////////////////////
/* =======================================================================
 * 系统名   : 
 * 子系统名 : 
 * Class名  : FixedThreadPool.java
 * 概要     : 
 * 改版履历 : 
 * 版本                     日期                    作者名             备注
 * 1.0.0    2015年1月13日        郭恩洲          初次作成
 * ======================================================================= */
package thread;

import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class FixedThreadPool {

	
	public static void main(String[] args) {
		//ExecutorService es = Executors.newFixedThreadPool(50);
		//ExecutorService es = Executors.newSingleThreadExecutor();
		//ExecutorService es = Executors.newScheduledThreadPool(30);
		final ThreadPoolExecutor es = new ThreadPoolExecutor(50,50,0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>());
		System.out.println("队列:"+es.getQueue().size()+"---线程池大小："+es.getPoolSize()+"--运行中线程:"+es.getActiveCount());
		for ( int i = 0; i <8000000; i++) {
			System.out.println("任务"+i);
			es.submit(new Runnable() {
				@Override
				public void run() {
					try {
						System.out.println(Thread.currentThread().getName());
						int num = new Random().nextInt(10);
						System.out.println("该任务需要时间"+num+"秒");
						Thread.currentThread().wait(num*1000);
						//TimeUnit.SECONDS.sleep(num);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					
				}
			});
		}
		es.shutdown();
	
		//开启定时任务判定
		final Timer timer = new Timer();
		timer.schedule(new TimerTask() {
			@Override
			public void run() {
				System.out.println("任务超时强制关闭!");
				System.out.println(es.isShutdown());
					try {
						es.shutdownNow();
						timer.cancel();
					} catch (Exception e) {
						System.out.println("任务强制关闭warning");
					}
			}
		}, 1000*60*60);
		
		System.out.println("执行完成");
		while(!es.isShutdown()){	
			try {
				TimeUnit.SECONDS.sleep(1);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			System.out.println(Thread.currentThread().getName());
			System.out.println("队列:"+es.getQueue().size()+"---线程池大小："+es.getPoolSize()+"--运行中线程:"+es.getActiveCount());
		}
	}
}
